0x00

前几天遇到了一个问题,就是在 AngularJS 中 $state 发生改变(或者称之为路由发生变化)不会清空前一个 scope 的内容,具体情景如下图

我在这个 scope 添加了一个间隔十分钟的 $interval,为了方便演示我改成了三秒钟的,当我进行数次在这个页面和其他页面间切换后,发现这个 scope 里的 $interval 重叠了,之前的 $interval 都没有销毁,不仅表现出现了错误,还造成了内存泄漏。


0x01

解决方法是在 scope 触发 $destroy 时或者 $state 触发 $stateChangeSuccess 时手动取消 $interval

var intervalCancel = $interval(func, 3000);

$scope.$on("$destroy", function (e) {   //$stateChangeSuccess
    if (intervalCancel)
        $interval.cancel(intervalCancel);
});

现在看起来就正常了